/*Name: rsa.h
  Last Modification: 31/05/10 23:20
  Description: Header de la classe rsa. Cet algorithme utilise les propriétées des nombres
  premiers pour assurer la sécurité du cryptosystéme. C'est un chiffrement asymétrique très
  utilisé de nos jours pour communiquer des données sensibles comme pour les banques.
  C'est également ce système que l'on retrouve dans nos ordinateurs lorsque l'on souhaite
  se connecter de façcon securisé à un autre ordinateur (voir ssh)
  License: GNU GPL v3
    Copyright (C) 2012 G. Bonnoron, P.Brunet, C. Duchene et F. Cornevaux-Juignet

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.*/

#ifndef RSA_H
#define RSA_H

//inclusion des bibliothèques
#include<QWidget>
#include<QLabel>
#include<QString>
#include<QTime>
#include<QLineEdit>
#include<QTextEdit>
#include<QFile>
#include<QObject>
#include<QVBoxLayout>
#include<QPushButton>
#include<QCheckBox>
#include<QProgressBar>
#include "rsa_global.h"
#include "../../algorithme.h"
#include <gmp.h>
#include <gmpxx.h>

class Rsa : public Algorithme
{
    Q_OBJECT
public:
    Rsa();
    void chiffre(bool fich);
    void dechiffre(bool fich);
    QList<QWidget* > affiche();
    Algorithme* maker();
    ~Rsa();
    QString nom();
    QString aide();
public slots:
    void save();
    void valeurAJour();
    void majClef();
private:
    void generercle();
    void outRsa(bool fichier);
    void calculVar();
    mpz_class changeLettreChiffre(mpz_class lettre);
    mpz_class changeLettreDechiffre(mpz_class lettre);
    mpz_class n,p,q,e,phi,d;
    QLineEdit *cle1, *cle2, *clefichier,*clefichier2;
    QTextEdit *crypter;
    QPushButton * bouton;
    QWidget * fenetre;
    QLabel * label_p, * label_q, * label_phi, * label_n, * label_e, * label_d;
    QCheckBox * coche, * coche2;
    QProgressBar * barre;
};

#endif // RSA_H
